//
//  MainTabBarController.swift
//  SinaBlog
//
//  Created by ChenWei on 15/10/2.
//  Copyright © 2015年 cw. All rights reserved.
//

import UIKit

class MainTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 1. 设置tabBar上文字颜色
//        tabBar.tintColor = UIColor.orangeColor()
        /**
         do try catch 是用于防止Json数据解析不成功,
         try: 尝试 解析Json数据
         catch : 捕获异常,有异常时执行此处代码.
         如果写try!, 强制try, 可以不写do catch, 但是如果抛出异常, 程序会崩溃
         */
        
        // 2. 添加子控制器
        do{
            
            // 1.拿到Json文件的路径
            let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)!
            
            // 2.生成NSData
            let data =  NSData(contentsOfFile: path)!;
            
            // 3.解析JSon -> 字典数组
            let dictArr = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers)
            
            // 4. 遍历数组创建子控制器    (要遍历必须明确类型是数组,(从上面得到的是anyOject)
            for  dict in dictArr as! [AnyObject]  {
                addChildViewController(dict["vcName"] as! String, imageName: dict["imageName"] as! String, title: dict["title"] as! String)
            }
            
        }catch { // 有异常时执行, 防止Json 数据(nsdata 解析失败:比如Json数据格式错了,解析出来的不是可识别的对象)
            // 首页
            addChildViewController("HomeTableController", imageName: "tabbar_home", title: "首页")
            
            // 消息
            addChildViewController("MessageTableViewController", imageName: "tabbar_message_center", title: "消息")
            
            // "+"号控制器
            addChildViewController("NullViewController", imageName: "", title: "")
            
            // 发现
            addChildViewController("DiscoverTableViewController", imageName: "tabbar_discover", title: "发现")
            // 我
            addChildViewController("ProfileTableViewController", imageName: "tabbar_profile", title: "我")
        }
    }
   
    
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        
        // 1.添加"+"号按钮
        tabBar.addSubview(composeButton)
        
        // 2.计算"+"号按钮的宽度
        let width = UIScreen.mainScreen().bounds.width / CGFloat (childViewControllers.count)
        
        // 设置"+"号按钮frame
        // 方法一
//        let rect = CGRectMake(width * 2, 0, width, tabBar.frame.height)
//        composeButton.frame = rect;
        // 方法二:
        let rect = CGRect(origin: CGPointZero, size: CGSize(width: width, height: tabBar.frame.height))
        composeButton.frame = CGRectOffset(rect, 2 * width, 0)
    }
    

    // MARK: - 内部方法
    /// 创建子控制器
    func addChildViewController(vcName: String, imageName: String, title: String) {
        
        // 0. 通过类名创建控制器
        let cls: AnyObject = NSClassFromString("SinaBlog." + vcName)!;
        let vc = (cls as! UIViewController.Type).init()
        
        // 1.设置图片和标题
        if imageName != "" {
            vc.tabBarItem.image = UIImage(named: imageName);
            vc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
            vc.title = title
        }
        
        // 2.包装成nav
        let nav = UINavigationController(rootViewController: vc)
        
        // 3. 将nav添加成tabBarVC的子控制器
        addChildViewController(nav)
        
        // 用anyClass :
        // sfsf===HomeTableController====<SinaBlog.HomeTableController: 0x7feb6a61dde0>
        //        sfsf===MessageTableViewController====<SinaBlog.MessageTableViewController: 0x7feb6a4ab250>
        //        sfsf===DiscoverTableViewController====<SinaBlog.DiscoverTableViewController: 0x7feb6a68fda0>
        //        sfsf===ProfileTableViewController====<SinaBlog.ProfileTableViewController: 0x7feb6a4bd470>
        //        <SinaBlog.MainTabBarController: 0x7feb6a72bb30>
        
        // 用anyObject : 这个表示的范围更好,只要是类型都能表示, 上面anyClass只能表示对象,
        //        sfsf===SinaBlog.HomeTableController====<SinaBlog.HomeTableController: 0x7f9e3173b830>
        //        sfsf===SinaBlog.MessageTableViewController====<SinaBlog.MessageTableViewController: 0x7f9e3163e080>
        //        sfsf===SinaBlog.DiscoverTableViewController====<SinaBlog.DiscoverTableViewController: 0x7f9e3165a730>
        //        sfsf===SinaBlog.ProfileTableViewController====<SinaBlog.ProfileTableViewController: 0x7f9e3167c560>
        //        <SinaBlog.MainTabBarController: 0x7f9e31620d00>
    }
    
    /// 监听"+"号按钮
    @objc private func composeBtnClick() {
        // 1.创建nullVc
        let nullVc = NullViewController()
        nullVc.view.backgroundColor = UIColor.grayColor()
        
        // 2.弹出nullVC
        presentViewController(nullVc, animated: true, completion: nil)
    }

    // MARK: - 懒加载
    /// 创建"+"号按钮
    lazy var composeButton : UIButton = {
        // 1. 创建按钮
        let composeButton = UIButton()
        
        // 2.设置图片
        composeButton.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: UIControlState.Normal)
        composeButton.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: UIControlState.Highlighted)
        
        // 3.设置背景
        composeButton.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: UIControlState.Normal)
        composeButton.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: UIControlState.Highlighted)
        
        // 4.添加监听
        composeButton.addTarget(self, action: Selector("composeBtnClick"), forControlEvents: UIControlEvents.TouchUpInside)
        
        return composeButton
        }()
    
    class vv: UIColor {
        var age = 10
    }
    
    class gg: UIColor {
        let ab = vv()
        func a() {
            ab.age = 90;
        }
//        aa.age = 90
    }
}

